In today's world of complex industrial systems, human-machine interface (HMI) devices are utilized to provide a means for personnel to monitor and control various aspects of an industrial plant. Activities such as monitoring settings for temperatures and pressures, starting and stopping processes, reviewing sensor readings and setting actuator values and the like may all be controlled through HMI devices. Other operations also may fall within the purview of the industrial control personnel. An HMI device is a computer-controlled component that necessarily requires the utilization of various graphical visualizations (providing a graphical user interface, or GUI, to the operating personnel), and must be responsive to inputs from the personnel. Given the industrial environment within which these HMI devices are generally used, their computer-based processes need to operate in real time, recognize alarm conditions, and continue to operate in relatively extreme environments (e.g., high temperature).
At this point in time, HMI devices have been based upon the utilization a conventional, single-core multiprocessor as the main computing engine for the device, with HMI application developers using known HMI elements to construct the applications as required.
Along a separate development path, increases in processing capability have advanced in recent years by creating multi-core processors—starting with dual-core configurations where two separate processors were integrated within a single integrated circuit. Today, these processors, which are hereinafter referred to at times as “multiprocessors” are configured in a variety of different forms: a single processor with multiple cores, multiple single-core processors, a “many” core processor (which embodies multiple multi-core processors) or any combination of the above.
A “heterogeneous” multiprocessor environment, for the purposes of the present invention, is therefore intended to define a system where the multiple cores forming the complete suite of processing capability may comprise different types of processors, each with its own set of operating parameters such as size of processing core(s), speed, throughput, etc.
Multiprocessors (both central processing units (CPUs) and graphics processing units (GPUs) are becoming the standard computing element in modern industrial computer systems, particularly as a result of their improved performance over conventional single-core processing arrangements. For example, compared to traditional single-core CPUs, a multiprocessor-based CPU is more power efficient and generating less heat. Therefore, cooling of a multiprocessor-based CPU is easier and less expensive that a counterpart single-processor CPU system sized to perform under the same conditions. Moreover, a multiprocessor-based CPU has the ability to process more instructions in a given period of time as a result of its parallel execution capability.
In order to best take advantage of the parallel execution properties of a multiprocessor system, an application programmer must be able to identify and define data-independent fragments of a program that may be simultaneously executed within different processing cores. While this principle is simple in concept, the ability to identify data-independent fragments is very difficult in practice, particularly for programs that need to run in real time, such as the HMI applications described above.
A graphical user interface (GUI) is a common example of an HMI application that has been difficult to execute across multiple processors as a result of the real-time requirements for these GUI operations. Moreover, parallel execution does not always lead to faster computations. In practice, an application programmer must also take into account the cost of synchronizing different processing units (perhaps operating at different rates) and communicating data from one processing unit to another. Indeed, the cost of communication can mitigate any performance gains that result from parallel execution and may, at times, be detrimental to the performance of the application.
In an attempt to solve this problem, software and hardware vendors have been able to accelerate the execution of some GUI primitive operations. Traditionally, these accelerated operations are implemented in libraries that the system executes in specialized hardware (as opposed to software). For example, video card vendors provide the libraries to execute common GUI operations in a GPU. Although hardware acceleration works well and reduces the execution time of some GUI operations, HMI applications cannot rely on these assumptions to meet their real-time deadlines, since acceleration libraries are necessarily hardware-specific and vary from system to system. That is, an HMI application cannot be developed on the assumption that all HMI systems which may desire to run the application being developed include hardware-accelerated libraries, since HMI systems are known to vary all the way from very high-end arrangements (e.g., with GPUs and 64-bit multi-core CPUs) to low-end systems (e.g., with minimal graphic capabilities, little or no memory, and 16-bit embedded processors).
Thus, it remains desirable to find a means other than hardware acceleration to improve the efficiency of HMI applications in a multiprocessor environment.